/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ui;

import edu.ucue.ptc.gco.mdl.Cargo;
import edu.ucue.ptc.gco.mdl.Empleado;
import edu.ucue.ptc.gco.mdl.Producto;
import edu.ucue.ptc.gco.mdl.Usuario;
import edu.ucue.ptc.gco.ngc.CargoManagerLocal;
import edu.ucue.ptc.gco.ngc.EmpleadoManagerLocal;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

/**
 *
 * @author Johnny
 */
@Named(value = "empleadoAction")
@SessionScoped
public class EmpleadoAction implements Serializable {

    /**
     * Creates a new instance of empleadoAction
     */
     @Inject 
    private EmpleadoManagerLocal empleadoManager;
     @Inject
     private CargoManagerLocal cargoManager;
     
     public static EmpleadoAction getInstance() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ex = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().
                createValueExpression(context, "#{empleadoAction}", EmpleadoAction.class);
        return (EmpleadoAction) ex.getValue(context);}
     
    private Empleado empleado;
    private String editAction;
    
    private Cargo cargoSel;
    private String titulo;
    private List<Cargo> cargos;
    
    public void crearEmpleado()
    {
        setEmpleado(new Empleado());
        empleado.setUsuario(new Usuario());
    }
    @PostConstruct
    public void init() {   
            cargos = cargoManager.listarCargo();    
    }
    
    public String nuevo()
    {
        setEmpleado(new Empleado());
        empleado.setUsuario(new Usuario());
        this.editAction = "crear";
        
        return "empleado";
    }
    
    public String editar(Empleado empleado){
        setEmpleado(empleado);
        setCargoSel(empleado.getCargo());
        this.editAction = "actualizar";
        
        return "empleado";
    }

    public String eliminar(Empleado empleado){
        setEmpleado(empleado);
        this.editAction = "eliminar";
        
        return "empleado";
    }
      public void addMessage(FacesMessage message) {
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    public String grabar()
    {
        try
        {
            if (this.editAction.equals("crear")){
                empleado.setCargo(cargoSel);
                empleadoManager.crearEmpleado(getEmpleado(),LoginAction.getUsername(), LoginAction.getPassword());
                addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "CREAR EMPLEADO", "EMPLEADO CREADO CORRECTAMENTE"));
            }
            else if (this.editAction.equals("actualizar")){
                 empleado.setCargo(cargoSel);
                empleadoManager.modificarEmpleado(getEmpleado(),LoginAction.getUsername(), LoginAction.getPassword());
                addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "MODIFICAR EMPLEADO", "EMPLEADO MODIFICADO CORRECTAMENTE"));
            }
            else if (this.editAction.equals("eliminar")){
                empleadoManager.eliminarEmpleado(getEmpleado(),LoginAction.getUsername(), LoginAction.getPassword());
                addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "ELIMINAR EMPLEADO", "EMPLEADO ELIMINADO CORRECTAMENTE"));
            }
            return "listaEmpleados";
            
        } catch (Exception e) {
            addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "ERROR AL REALIZAR LA OPERACION", e.getMessage()));
            
            return null;
        }
    }
    
    public String cancelar()
    {
        return "listaEmpleados";
    }
    
    public String getTitulo()
    {
        if (this.editAction.equals("crear"))
                return "Crear Empleado";
            else if (this.editAction.equals("actualizar"))
                return "Actualizar Empleado";
            else if (this.editAction.equals("eliminar"))
                return "Eliminar Empleado";
        return "Cargo";
    }
    
    public void setUsuario()
    {
        empleado.setUsuario(new Usuario());
    }
    
    
    public String getEditAction() {
        return editAction;
    }

    public void setEditAction(String editAction) {
        this.editAction = editAction;
    }
    
    public EmpleadoAction() {
    
        empleado= new Empleado();
    }

    public Empleado getEmpleado() {
        return empleado;
    }

    public void setEmpleado(Empleado empleado) {
        this.empleado = empleado;
    }

    public Cargo getCargoSel() {
        return cargoSel;
    }

    public void setCargoSel(Cargo cargoSel) {
        this.cargoSel = cargoSel;
    }

    public List<Cargo> getCargos() {
        return cargos;
    }

    public void setCargos(List<Cargo> cargos) {
        this.cargos = cargos;
    }
    
}
